不同存储引擎
在Myisam这个里面,每个表的总数据数额外存了起来,每次读取,直接获取这个值,效率很高。但是在innodb里面,就需要一行行遍历,为什么呢,因为innodb采用mvcc多版本并发控制机制,不同事物下,读取的数目可能不一致。
解决方案
1.使用redis来缓存总量,在并发不是很高的情况下,没插入一条语句,redis就加一,删除一个数据,redis就减一。但是,插入数据和redis加一这操作不是原子操作,当要获取最新100条数据,和数据总量,如果有另外一个线程,在其中间执行,那么总量和最新数据无法保持一致。
2.将其放在mysql的一个表里面。如此即可,按照和redis一样的策略。但是不存在上面说的问题,因为mysql的rr隔离性,只要开启一个事务,这2个操作就是原子的。
效率
count(字段)<count(主键 id)<count(1)~count(*)